home *** CD-ROM | disk | FTP | other *** search
Wrap
10 'DUNPLAY THE QUEST 20 DEFINT A-Z 30 RANDOMIZE TIMER 40 GOSUB 400 'PLAY A TURN 50 IF LP = 0 THEN GOSUB 2890 60 GOTO 40 70 'END 80 CLOSE 90 END 100 'GET A MONSTER 110 DEP = R(RX,3)-R(RX,1) 120 WID = R(RX,4)-R(RX,2) 130 SIZ=(DEP-1)*(WID-1) 140 WK.LV =((INT(RX/4)+LV.ADJ)-1) 150 MX = (INT(RND*4)+1)+(4*(WK.LV)): IF MX>40 THEN MX=40 160 WK = MX+60 170 NBR = INT(RND*M.NBR(MX,2))+M.NBR(MX,1) 180 IF NBR > M.NBR(MX,2) THEN NBR=M.NBR(MX,2) 190 IF NBR > SIZ THEN NBR = SIZ-4 200 FOR ZZ = 1 TO NBR 210 V = (INT(RND*DEP)+1)+R(RX,1) 220 H = (INT(RND*WID)+1)+R(RX,2) 230 IF M(V,H) <> 32 GOTO 210 240 ML.MAX=ML.MAX+1: ML(ML.MAX,1)=V: ML(ML.MAX,2)=H 250 ML(ML.MAX,3)=RX: ML(ML.MAX,4)=INT((MX/4)+1) 260 M(V,H) = WK 270 M.H=(H*8)-8: M.V=(V*8)-8: DRAW "C3" 280 DRAW "BM=M.H;,=M.V;": DRAW "BR3;D4;F2;H2;G2" 290 DRAW "BM=M.H;,=M.V;": DRAW "BR3;D2;L2;R4" 300 R(RX,5)=MX: R(RX,6)=1 310 NEXT 320 RETURN 330 'MATCH TO SUPPLY FILE 340 LX=LEN(SK$) 350 FOR S = 1 TO SMAX 360 IF (SK$ = LEFT$(S.NAME$(S),LX)) AND (S(S,P+2) <> 0) THEN FOUND=1: GOTO 390 370 NEXT 380 FOUND = 0: MSG$="YOU DON'T OWN A "+SK$: GOSUB 4460: MSG$="": GOSUB 4460: GOTO 390 390 RETURN 400 'PLAY A TURN 410 LP=0: ATTACK=2 420 FOR P = 1 TO 9 430 IF P.NAME$(P) = "" THEN GOTO 610 440 LP=LP+1 450 GOSUB 4540 'CHECK PLAYERS LOCATION 460 IF TIMER < SV.TIMER! THEN GOTO 460 470 LOCATE 25,1: PRINT SPACE$(39);: LOCATE 25,1: PRINT P.NAME$(P); 480 DEF SEG=0: POKE(1050),PEEK(1052) 'CLEAR KEYBOARD BUFFER 490 AV=0: OVER.LOAD=0 500 IF P(P,10)<1 GOTO 530 510 P(P,10)=P(P,10)-1 520 IF P(P,10)<1 THEN GOSUB 2740 'THE LIGHTS WENT OUT 530 IF P(P,13)>0 THEN MSG$="YOU ARE RESTING": GOSUB 4460: P(P,13) = P(P,13)-1: GOTO 610 540 MV=(4-INT(P(P,1)/400))*ATTACK 550 IF HS>1 THEN MV=MV+MV 560 IF MV<1 THEN MV=1: MSG$="YOU ARE OVERLOADED & CAN'T MOVE": GOSUB 4460: OVER.LOAD=1 570 FOR T = 1 TO MV 580 GOSUB 2470 'PLAY A PLAYERS TURN 590 NEXT T 600 GOSUB 4540 'CHECK PLAYERS LOCATION 610 NEXT P 620 FOR D = 1 TO 3 630 IF D(D,1)=0 THEN GOTO 690 640 V=D(D,2): H=D(D,3) 650 IF M(V,H) <> 32 THEN GOTO 690 660 LOCATE V,H: PRINT CHR$(D(D,1)); 670 M(V,H)=D(D,1) 680 D(D,1)=0 690 NEXT D 700 GOSUB 4950 'PLAY MONSTERS 710 IF TE>0 THEN TE=TE-1 720 IF HS>0 THEN HS=HS-1 730 RETURN 740 'SAVE THE CURRENT SCREEN 750 GET (0,0)-(319,199),SV 760 RETURN 770 'RESTORE CURRENT SCREEN 780 PUT (0,0),SV,PSET 790 RETURN 800 'GET A REPLY 810 REPLY$=INKEY$: IF REPLY$="" THEN GOTO 810 820 IF LEN(REPLY$)=1 THEN GOTO 880 830 REPLY$=RIGHT$(REPLY$,1) 840 IF ASC(REPLY$)=72 THEN REPLY$=CHR$(30): GOTO 880 850 IF ASC(REPLY$)=80 THEN REPLY$=CHR$(31): GOTO 880 860 IF ASC(REPLY$)=77 THEN REPLY$=CHR$(28): GOTO 880 870 IF ASC(REPLY$)=75 THEN REPLY$=CHR$(29) 880 RETURN 890 'HELP SCREEN 900 GOSUB 740 'SAVE CURRENT SCREEN 910 CLS 920 PRINT " COMMANDS" 930 PRINT "USE THE CURSOR KEYS TO MOVE UP, DOWN," 940 PRINT "RIGHT OR LEFT ON THE SCREEN" 950 PRINT 960 PRINT "THE FOLLOWING COMMANDS ARE AVAILABLE " 970 PRINT " A = ATTACK (YOU MUST BE NEXT TO A " 980 PRINT " MONSTER)" 990 PRINT " T = THROW AWAY (IT'S GONE FOR GOOD)" 1000 PRINT " L = LIGHT (TORCH OR LANTERN) 1010 PRINT " H = HELP (DISPLAY COMMANDS)" 1020 PRINT " O = OPEN DOOR" 1030 PRINT " G = GET SOMETHING (FROM ANYWHERE)" 1040 PRINT " P = PUT (IN PACK, SCABBORD, ETC)" 1050 PRINT " R = RUN (FROM MONSTERS) 1060 PRINT " I = INVENTORY (WHAT YOU HAVE)" 1070 PRINT " Q = QUIT " 1080 PRINT " S = SEARCH (FOR TRAPS ETC) " 1090 PRINT " C = CAST A SPELL" 1100 LOCATE 25,1: PRINT "HIT ANY KEY TO CONTINUE"; 1110 GOSUB 800 'WAIT 1120 GOSUB 770 'RESTORE CURRENT SCREEN 1130 RETURN 1140 'MOVE 1150 IF OVER.LOAD=1 THEN MSG$="YOU CAN'T MOVE": GOSUB 4460: GOTO 1290 1160 IF ASC(REPLY$)=28 THEN NH=P(P,7)+1: NV=P(P,6) 1170 IF ASC(REPLY$)=29 THEN NH=P(P,7)-1: NV=P(P,6) 1180 IF ASC(REPLY$)=30 THEN NV=P(P,6)-1: NH=P(P,7) 1190 IF ASC(REPLY$)=31 THEN NV=P(P,6)+1: NH=P(P,7) 1200 IF NV < 1 OR NV > 24 OR NH <1 OR NH > 39 THEN BEEP: GOTO 1290 1210 IF M(NV,NH) <> 32 GOTO 1270 'SOMETHING THERE 1220 M(NV,NH)=M(P(P,6),P(P,7)): M(P(P,6),P(P,7)) = 32 'MOVE PLAYER & RESTORE TO BLANK 1230 LOCATE P(P,6),P(P,7): PRINT CHR$(M(P(P,6),P(P,7))) 1240 P(P,6)=NV: P(P,7)=NH 1250 LOCATE P(P,6),P(P,7): PRINT CHR$(M(NV,NH)); 1260 GOTO 1290 1270 IF M(NV,NH) <> 0 THEN BEEP: GOTO 1290 1280 GOSUB 3670: GOTO 1220 'A TRAP 1290 RETURN 1300 'LIGHT (TORCH OR LANTERN) 1310 S=P(P,8) 1320 IF S=13 OR S=14 THEN GOTO 1370 1330 S=P(P,9) 1340 IF S=13 OR S=14 THEN GOTO 1370 1350 MSG$="YOU DON'T HAVE TORCH OR LANTERN IN HAND": GOSUB 4460 1360 GOTO 1440 1370 IF S(15,P+2) <> 0 THEN GOTO 1410 1380 MSG$="YOU DON'T HAVE A TINDER BOX": GOSUB 4460 1390 IF P(P,8)=13 OR P(P,8)=14 THEN P(P,8)=0: GOTO 1440 'DUMP IT 1400 IF P(P,9)=13 OR P(P,9)=14 THEN P(P,9)=0: GOTO 1440 'DUMP IT 1410 IF P(P,8)=14 OR P(P,9)=14 THEN P(P,10)=P(P,10)+10: GOTO 1430 1420 IF P(P,8)=13 OR P(P,9)=13 THEN P(P,10)=P(P,10)+40 1430 T=MV+1 1440 RETURN 1450 'GET 1460 LOCATE 25,1: PRINT SPACE$(39); 1470 LOCATE 25,1: PRINT "GET WHAT? "; 1480 GOSUB 7110 'GET REPLY 1490 IF W$="TREASURE" THEN GOSUB 3210: GOTO 1580 1500 SK$=W$ 1510 GOSUB 330 1520 IF FOUND = 0 THEN GOTO 1560 1530 IF P(P,8) = 0 THEN P(P,8) = S: S(S,P+2)=S(S,P+2)-1: MSG$="OK": GOTO 1560 1540 IF P(P,9) = 0 THEN P(P,9) = S: S(S,P+2)=S(S,P+2)-1: MSG$="OK": GOTO 1560 1550 MSG$="YOUR HANDS ARE FULL": GOSUB 4460: GOTO 1580 1560 GOSUB 4460: IF S=4 THEN P(P,5)=P(P,5)+1 'SHIELD 1570 IF S=13 OR S=14 OR S=16 THEN GOSUB 1300 'LIGHT IT 1580 RETURN 1590 'OPEN 1600 IF T <> 1 THEN MSG$="THE DOOR WON'T OPEN": GOSUB 4460: GOTO 1810 1610 IF TO.OPEN = 0 THEN TO.OPEN = INT(RND*6)+1 ELSE TO.OPEN=0 1620 ZZ = INT(RND*6) + ((P(P,2)/3)-3) 1630 IF P.CLASS$(P) = "THIEF " THEN ZZ=ZZ+P(P,4) 1640 IF ZZ < TO.OPEN THEN MSG$="THE DOOR WON'T OPEN": GOSUB 4460: GOTO 1810 1650 V=P(P,6): H=P(P,7) 1660 LV=V-1: HV=V+1: LH=H-1: HH=H+1 1670 FOR V = LV TO HV 1680 FOR H = LH TO HH 1690 IF M(V,H) <> 179 AND M(V,H) <> 196 THEN GOTO 1780 1700 FOR D=1 TO 3 1710 IF D(D,1)=0 THEN D(D,1)=M(V,H): D(D,2)=V: D(D,3)=H: GOTO 1730 1720 NEXT D 1730 M(V,H)=M(P(P,6),P(P,7)): M(P(P,6),P(P,7)) = 32 'MOVE PLAYER 1740 LOCATE P(P,6),P(P,7): PRINT CHR$(M(P(P,6),P(P,7))) 1750 P(P,6)=V: P(P,7)=H 1760 LOCATE P(P,6),P(P,7): PRINT CHR$(M(V,H)); 1770 GOTO 1810 1780 NEXT H 1790 NEXT V 1800 MSG$="YOU ARE NOT BY A DOOR": GOSUB 4460: GOTO 1810 1810 T=MV+1: TO.OPEN=0 1820 RETURN 1830 'THROW AWAY 1840 LOCATE 25,1: PRINT SPACE$(39); 1850 LOCATE 25,1: PRINT "THROW WHAT? "; 1860 GOSUB 7110 'GET REPLY 1870 LX=LEN(W$) 1880 ' 1890 FOR S=1 TO SMAX 1900 IF W$ = LEFT$(S.NAME$(S),LX) THEN GOTO 1930 1910 NEXT 1920 MSG$="A WHAT?": GOSUB 4460: GOTO 2030 1930 IF P(P,8) = S THEN P(P,8) = 0: GOTO 1970 1940 IF P(P,9) = S THEN P(P,9) = 0: GOTO 1970 1950 MSG$="IS'S NOT IN YOUR HAND": GOSUB 4460 1960 GOTO 2030 1970 P(P,1) = P(P,1)-S(S,2) 1980 IF S=4 THEN P(P,5)=P(P,5)-1 'SHIELD 1990 IF S=13 THEN P(P,10) = P(P,10)-40 2000 IF S=14 THEN P(P,10) = P(P,10)-10 2010 IF P(P,10) < 1 THEN P(P,10)=0 2020 MSG$="OK IT'S GONE": GOSUB 4460 2030 RETURN 2040 'PUT 2050 LOCATE 25,1: PRINT SPACE$(39); 2060 LOCATE 25,1: PRINT "PUT WHAT? "; 2070 GOSUB 7110 'GET REPLY 2080 LX=LEN(W$) 2090 ' 2100 FOR S = 1 TO SMAX 2110 IF W$ = LEFT$(S.NAME$(S),LX) THEN GOTO 2140 2120 NEXT 2130 GOTO 2220 2140 IF P(P,8) = S THEN P(P,8) = 0: S(S,P+2)=S(S,P+2)+1: MSG$="OK": GOTO 2170 2150 IF P(P,9) = S THEN P(P,9) = 0: S(S,P+2)=S(S,P+2)+1: MSG$="OK": GOTO 2170 2160 MSG$="IS'S NOT IN YOUR HAND": GOSUB 4460: GOTO 2220 2170 GOSUB 4460 2180 IF S=4 THEN P(P,5)=P(P,5)-1 'SHIELD 2190 IF S=13 THEN P(P,10) = P(P,10)-40 2200 IF S=14 THEN P(P,10) = P(P,10)-10 2210 IF P(P,10) < 1 THEN P(P,10)=0 2220 RETURN 2230 'RUN 2240 MSG$=P.NAME$(P)+" IS RUNNING": GOSUB 4460 2250 GOSUB 800: P(P,13)=2 2260 GOSUB 1140: GOSUB 1140: GOSUB 1140 'MOVE 3 TIMES NORMAL RATE 2270 RETURN 2280 'INVENTORY 2290 GOSUB 740 'SAVE CURRENT SCREEN 2300 CLS: ZZ=0 2310 PRINT " INVENTORY" 2320 PRINT: PRINT "HIT POINTS ";P(P,3);" LIGHT ";P(P,10) 2330 PRINT "WEIGHT YOU ARE CARRYING ";P(P,1) 2340 PRINT 2350 IF P(P,8) = 0 THEN PRINT "YOUR RIGHT HAND IS EMPTY" ELSE PRINT "IN YOUR RIGHT HAND IS A ";S.NAME$(P(P,8)) 2360 IF P(P,9) = 0 THEN PRINT "YOUR LEFT HAND IS EMPTY" ELSE PRINT "IN YOUR LEFT HAND IS A ";S.NAME$(P(P,9)) 2370 FOR S = 1 TO SMAX 2380 IF S(S,P+2) = 0 THEN GOTO 2430 2390 PRINT S.NAME$(S);S(S,P+2) 2400 ZZ=CSRLIN: IF ZZ < 23 THEN GOTO 2430 2410 LOCATE 25,1: PRINT "HIT ANY KEY TO CONTINUE"; 2420 GOSUB 800: CLS: ZZ=0 2430 NEXT S 2440 LOCATE 25,1: PRINT "HIT ANY KEY TO CONTINUE";: GOSUB 800 2450 GOSUB 770 2460 RETURN 2470 'PLAY A TURN 2480 GOSUB 800 'GET COMMAND 2490 IF REPLY$ <>"A" THEN AV=0 2500 IF REPLY$ = " " THEN GOTO 2650 2510 IF ASC(REPLY$) > 27 AND ASC(REPLY$) < 32 THEN GOSUB 1140: GOTO 2650 2520 IF REPLY$ = "A" THEN GOSUB 3940: GOTO 2650 2530 IF REPLY$ = "C" THEN GOSUB 5870: GOTO 2650 2540 IF REPLY$ = "S" THEN GOSUB 2940: GOTO 2650 2550 IF REPLY$ = "O" THEN GOSUB 1590: GOTO 2650 2560 IF REPLY$ = "G" THEN GOSUB 1450: GOTO 2650 2570 IF REPLY$ = "L" THEN GOSUB 1300: GOTO 2650 2580 IF REPLY$ = "P" THEN GOSUB 2040: GOTO 2650 2590 IF REPLY$ = "R" THEN GOSUB 2230: GOTO 2650 2600 IF REPLY$ = "H" THEN GOSUB 890: GOTO 2650 2610 IF REPLY$ = "I" THEN GOSUB 2280: GOTO 2650 2620 IF REPLY$ = "T" THEN GOSUB 1830: GOTO 2650 2630 IF REPLY$ = "Q" THEN GOSUB 2890: GOTO 2650 2640 GOTO 2470 2650 RETURN 2660 'DRAW THE ROOM 2670 IF R(RX,6) < 1 THEN R(RX,5)=0 2680 IF R(RX,5) <> 0 THEN GOTO 2710 2690 IF WAN.MON <> 6 THEN GOTO 2730 2700 GOSUB 100 'GET A WANDERING MONSTER 2710 SV.MON = R(RX,5) 2720 MSG$=M.NAME$(SV.MON)+"S!": GOSUB 4460 2730 RETURN 2740 'THE LIGHTS WENT OUT 2750 SV.TIMER!=TIMER+1 2760 IF TIMER < SV.TIMER! THEN GOTO 2760 2770 LOCATE 25,1: PRINT SPACE$(38);: LOCATE 25,1: PRINT "YOUR LIGHT WENT OUT"; 2780 P.TOT=0 2790 SV.TIMER! = TIMER+2 2800 IF P(P,8)=14 THEN P(P,8)=0 2810 IF P(P,9)=14 THEN P(P,9)=0 2820 IF P(P,8)<>13 AND P(P,9)<>13 THEN GOTO 2870 2830 IF S(16,P+2) = 0 THEN GOTO 2850 2840 S(16,P+2) = S(16,P+2)-1: GOTO 2870 2850 IF P(P,8) = 13 THEN P(P,8)=0 2860 IF P(P,9) = 14 THEN P(P,9)=0 2870 IF TIMER < SV.TIMER! THEN GOTO 2870 2880 RETURN 2890 'QUIT - END GAME 2900 MSG$="YOU WANT TO QUIT? (Y/N)": GOSUB 4460 2910 GOSUB 800 2920 IF REPLY$ <> "Y" THEN RETURN 2930 CHAIN "DUNEND",10,ALL 2940 'SEARCH 2950 IF T <> 1 THEN GOTO 3180 2960 ROLL = INT(RND*6)+1 2970 FOUND = 1 2980 IF P.CLASS$(P) = "DWARF " THEN FOUND = 2 2990 IF P.CLASS$(P) = "THIEF " THEN FOUND=FOUND+P(P,4) 3000 IF FT<>0 THEN FT=0: FOUND=6 3010 IF ROLL > FOUND THEN GOTO 3180 3020 RX=0: SV.MON = 0 3030 V=P(P,6): H=P(P,7) 3040 RX = RX+1 3050 IF R(RX,1) = 0 THEN GOTO 3190 3060 IF V => R(RX,1) AND V =< R(RX,3) AND H => R(RX,2) AND H =< R(RX,4) THEN GOTO 3080 3070 GOTO 3040 3080 FOR V=R(RX,1) TO R(RX,3) 3090 FOR H=R(RX,2) TO R(RX,4) 3100 IF M(V,H) = 0 THEN SV.MON=1: GOTO 3130 3110 NEXT H 3120 NEXT V 3130 IF SV.MON = 0 THEN GOTO 3180 'NO TRAP 3140 LOCATE V,H: PRINT "T"; 3150 ROLL = INT(RND*6)+1 3160 MSG$="YOU FOUND "+TRAP$(ROLL): GOSUB 4460 3170 GOTO 3190 3180 MSG$="YOU FIND NOTHING": GOSUB 4460 3190 T=MV+1 3200 RETURN 3210 'GET TREASURE 3220 IF P(P,8) <> 0 AND P(P,9) <> 0 THEN MSG$="YOUR HANDS ARE FULL": GOSUB 4460: GOTO 3660 3230 V=P(P,6): H=P(P,7) 3240 LV=V-1: HV=V+1: LH=H-1: HH=H+1 3250 FOR V = LV TO HV 3260 FOR H = LH TO HH 3270 IF M(V,H) > 0 AND M(V,H) < 20 THEN GOTO 3310 3280 NEXT H 3290 NEXT V 3300 MSG$="YOU ARE NOT BY A TREASURE": GOSUB 4460: GOTO 3660 3310 MX=M(V,H): 3320 TR = INT((MX-1)/4): TP=((MX-(TR*4))*20)+5: IF TP>100 THEN TP=100 3330 ROLL = INT(RND*100)+1 3340 MSG$="THE CHEST IS EMPTY" 3350 ROLL = INT(RND*20)+1 3360 IF ROLL = 10 THEN GOSUB 3670 'A TRAP 3370 IF ROLL > TP THEN GOSUB 4460: TG!=0: GOSUB 3640: GOTO 3410 3380 S$="IT CONTAINS A" 3390 TG!=INT(500*(TR)*(TP/100)) 3400 GOSUB 3420 ' THE TREASURE 3410 RETURN 3420 'THE TREASURE 3430 FOR ZZ = 1 TO TR 3440 S=INT((SMAX-1)*RND)+1 3450 IF S(S,12) > (1000*(TR+1)) THEN GOTO 3520 3460 MSG$=S$+" "+S.NAME$(S): SV.TIMER!=TIMER: GOSUB 4460 3470 IF S=33 THEN P(P,5)=P(P,5)-4: GOTO 3490 3480 GOSUB 800: IF REPLY$<>"Y" THEN GOTO 3520 3490 S(S,P+2)=S(S,P+2)+1 3500 EXPR!=EXPR!+S(S,12) 3510 P(P,1) = P(P,1)+S(S,2) 3520 NEXT ZZ 3530 IF TG! < 1 THEN GOTO 3640 3540 TJ=0 3550 IF TG! > 999 THEN TJ = INT(TG!/1000): TG!=TG!-INT(TJ*1000) 3560 TG=0 3570 IF TG! > 99 THEN TG = INT(TG!/100): TG!=TG!-INT(TG*100) 3580 IF TJ >0 THEN MSG$=STR$(TJ)+" JEWELRY": GOSUB 4460 3590 IF TG >0 THEN MSG$=STR$(TG)+" GEMS": GOSUB 4460 3600 MSG$=STR$(TG!)+" GOLD PIECES": GOSUB 4460 3610 GP!=GP!+WG!+(TJ*1000)+(TG*100) 3620 EXPR!=EXPR!+WG!+(TJ*1000)+(TG*100) 3630 P(P,1) = P(P,1)+WG!+(TJ*10)+TG 3640 MSG$=SPACE$(39): GOSUB 4460 'CLEAR MSG LINE 3650 LOCATE V,H: PRINT " ";: M(V,H)=32 'CLEAR THE TREASURE 3660 RETURN 3670 'A TRAP! 3680 ZZ=0 3690 ROLL = INT(RND*6)+1 3700 MSG$="A TRAP!!!": GOSUB 4460 3710 IF ROLL = 1 OR ROLL = 2 THEN MSG$="A CLOUD OF YELLOW GAS FILLS THE ROOM" 3720 IF ROLL = 3 THEN MSG$="YOU FALL INTO A HIDDEN PIT" 3730 IF ROLL = 4 THEN MSG$="A BLOCK FALLS FROM THE CEILING" 3740 IF ROLL = 5 THEN MSG$="A POISON NEEDLE" 3750 IF ROLL = 6 THEN MSG$="A DART FIRES AT YOU" 3760 GOSUB 4460 3770 IF ROLL = 2 THEN MSG$="IT'S HARMLESS": GOSUB 4460: GOTO 3890 3780 IF ROLL = 3 THEN ZZ = INT(RND*6)+1: P(P,3)=P(P,3)-ZZ: GOTO 3890 3790 IF ROLL = 6 THEN ZZ = (INT(RND*6)+1)*(INT(RND*4)+1): P(P,3)=P(P,3)-ZZ: GOTO 3890 3800 ZZ = INT(RND*20)+1 3810 GET #1,P 3820 IF ROLL <> 4 THEN GOTO 3860 3830 ZZ = INT(RND*20)+1 3840 IF ZZ => CVI(SV.STONE$) THEN MSG$="IT MISSED": GOSUB 4460: ZZ = 0: GOTO 3890 3850 ZZ = INT(RND*10)+1: P(P,3)=P(P,3)-ZZ: GOTO 3890 3860 ZZ = INT(RND*20)+1 3870 IF ZZ => CVI(SV.POISON$) THEN MSG$="THE GODS HAVE SPARED YOU": GOSUB 4460: ZZ=0: GOTO 3890 3880 P(P,3)=0 3890 IF ZZ = 0 THEN GOTO 3930 3900 IF P(P,3) > 0 THEN MSG$="IT DID "+STR$(ZZ)+" POINTS DAMAGE" 3910 IF P(P,3) <1 THEN MSG$=P.NAME$(P)+"IS DEAD": P.NAME$(P) = "": V=P(P,6):H=P(P,7): LOCATE V,H: PRINT " ";: M(V,H)=32 3920 GOSUB 4460 3930 RETURN 3940 'ATTACK 3950 IF ATTACK = 2 THEN T=INT(T*2) 3960 ATTACK=1: V=P(P,6): H=P(P,7) 3970 ' CHECK IF NEXT TO A MONSTER 3980 LV=V-1: HV=V+1: LH=H-1: HH=H+1 3990 FOR V = LV TO HV 4000 FOR H = LH TO HH 4010 IF M(V,H) > 60 AND M(V,H) < 124 THEN GOTO 4050 4020 NEXT H 4030 NEXT V 4040 MSG$="YOU ARE NOT BY A MONSTER": GOSUB 4460: GOTO 4450 4050 MN=M(V,H)-60 4060 FOR LX = 1 TO ML.MAX 4070 IF ML(LX,1)=V AND ML(LX,2)=H THEN GOTO 4090 4080 NEXT 4090 S=P(P,8): IF S.CLASS$(S)="W" THEN GOTO 4130 4100 ZZ=S 4110 S=P(P,9) 4120 IF S.CLASS$(S) <> "W" AND S.CLASS$(ZZ) <> "W" THEN MSG$="YOU DON'T HAVE A WEAPON": GOSUB 4460: GOTO 4450 4130 ROLL=INT(RND*10)+1 4140 IF S=34 THEN ROLL=ROLL+5 4150 W$=STR$(M.AC(MN)): W$=RIGHT$(W$,1) 4160 WK=VAL(W$): IF M.AC(MN)=10 THEN WK=10 4170 ZZ = 1+(WK-P(P,4)): IF ZZ > 10 THEN ZZ=10 4180 IF ZZ < 1 THEN ZZ=1 4190 IF ZZ > ROLL THEN MSG$="YOU MISSED":GOSUB 4460: GOTO 4450 4200 IF M.AC(MN) < 11 THEN GOTO 4290 'NO SPECIAL WEAPON REQUIRED 4210 IF M.AC(MN) > 19 THEN GOTO 4230 4220 IF S=10 THEN GOTO 4290 ELSE MSG$="IT DID NO HARM": GOSUB 4460: GOTO 4450 'MUST USE SILVER DAGGER 4230 IF M.AC(MN) > 29 THEN GOTO 4250 4240 IF S=34 THEN GOTO 4290 ELSE MSG$="IT DID NO HARM": GOSUB 4460: GOTO 4450 ,MUST USE MAGIC WEAPON 4250 IF M.AC(MN) > 39 THEN GOTO 4270 4260 IF ((S=34) OR (S=14 AND P(P,10) > 0)) THEN GOTO 4290 ELSE MSG$="IT DID NO HARM": GOSUB 4460: GOTO 4450 'MUST USE MAGIC OR FIRE 4270 IF M.AC(MN) > 49 THEN GOTO 4450 4280 IF S=36 THEN GOTO 4290 ELSE MSG$="IT DID NO HARM": GOSUB 4460: GOTO 4450 'MUST USE STAKES 4290 ' CHECK FOR DAMAGE 4300 DM=INT(RND*S(S,1))+1 4310 IF S=34 THEN DM=DM+10 4320 ML(LX,4)=ML(LX,4)-DM 4330 IF MN=32 AND ML(LX,4)<1 AND S<>14 THEN ML(LX,4)=1 'TROLL 4340 IF ML(LX,4)>0 THEN MSG$="THE "+M.NAME$(MN)+" HAS BEEN WOUNDED":GOSUB 4460: GOTO 4450 4350 MSG$="YOU KILLED THE "+M.NAME$(MN): GOSUB 4460: 4360 RX=ML(LX,3): R(RX,6)=R(RX,6)-1 4370 LOCATE V,H: PRINT " ";: M(V,H)=32: ML(LX,1)=0: 4380 MX=(INT(MN/4))+1 4390 EXPR!=EXPR!+(MX*10) 4400 S$="IT HAD A" 4410 TR = INT((MN-1)/4): TP=((MN-(TR*4))*20)+5: IF TP>100 THEN TP=100 4420 ROLL = INT(RND*100)+1 4430 IF ROLL > TP THEN GOTO 4450 4440 GOSUB 3420 'GET MONSTER'S TREASURE 4450 RETURN 4460 'MESSAGE 4470 IF TIMER < SV.TIMER! THEN GOTO 4470 4480 MS$=SPACE$(39) 4490 LSET MS$=MSG$ 4500 LOCATE 25,1 4510 PRINT MS$; 4520 SV.TIMER!=TIMER+1 4530 RETURN 4540 ' GET WHAT ROOM AND DRAW IF LIGHTED 4550 WAN.MON=INT(RND*24*PLAYERS)+1 4560 RX=0: SV.MON = 0: P(P,11)=0: P(P,12)=0 4570 V=P(P,6): H=P(P,7) 4580 RX = RX+1 4590 IF R(RX,1) = 0 THEN GOTO 4930 4600 IF V => R(RX,1) AND V =< R(RX,3) AND H => R(RX,2) AND H =< R(RX,4) THEN GOTO 4620 4610 GOTO 4580 4620 P(P,11)=RX 4630 HZ=((R(RX,2))*8) 4640 VZ=((R(RX,1))*8) 4650 IF P(P,10) > 1 THEN PAINT(HZ,VZ),1,3: GOSUB 2660: GOTO 4740 4660 IF WAN.MON=6 THEN GOSUB 2660 4670 FOR PX = 1 TO 9 4680 IF PX=P GOTO 4710 4690 IF P(PX,11) = RX AND P(PX,10) > 1 THEN GOTO 4740 4700 IF P(PX,12) = RX AND P(PX,10) > 1 THEN GOTO 4740 4710 NEXT PX 4720 IF (P(P,10) < 1) THEN GOTO 4730 ELSE GOTO 4740 4730 PAINT(HZ,VZ),2,3 4740 'CHECK FOR 2ND ROOM 4750 SV.MON = 0 4760 V=P(P,6): H=P(P,7) 4770 RX = RX+1 4780 IF R(RX,1) = 0 THEN GOTO 4930 4790 IF V => R(RX,1) AND V =< R(RX,3) AND H => R(RX,2) AND H =< R(RX,4) THEN GOTO 4810 4800 GOTO 4610 4810 P(P,12)=RX 4820 HZ=((R(RX,2))*8) 4830 VZ=((R(RX,1))*8) 4840 IF P(P,10) > 1 THEN PAINT(HZ,VZ),1,3: GOSUB 2660: GOTO 4940 4850 IF WAN.MON=6 THEN GOSUB 2660 4860 FOR PX = 1 TO 9 4870 IF PX=P GOTO 4900 4880 IF P(PX,11) = RX AND P(PX,10) > 1 THEN GOTO 4930 4890 IF P(PX,12) = RX AND P(PX,10) > 1 THEN GOTO 4930 4900 NEXT PX 4910 IF (P(P,10) < 1) THEN GOTO 4920 ELSE GOTO 4930 4920 PAINT(HZ,VZ),2,3 4930 WAN.MON=0 4940 RETURN 4950 'PLAY MONSTER 4960 MSG$="": GOSUB 4460 4970 M.ACT=INT(RND*6)+1: IF TE<>0 THEN M.ACT=2 4980 IF M.ACT = 1 THEN GOTO 5070 ' DO NOTHING 4990 IF M.ACT = 2 THEN M.ACT=-1 ELSE M.ACT=1 5000 FOR LX = 1 TO ML.MAX 5010 IF ML(LX,1) = 0 THEN GOTO 5060 5020 FOR P = 1 TO 9 5030 IF P.NAME$(P) = "" THEN GOTO 5050 5040 IF ML(LX,3)=P(P,11) OR ML(LX,3)=P(P,12) THEN GOSUB 5080: GOTO 5060 5050 NEXT P 5060 NEXT LX 5070 RETURN 5080 'MOVE THE MONSTER 5090 MX=M(ML(LX,1),ML(LX,2))-60 5100 IF MX=32 AND ML(LX,4) < 8 THEN ML(LX,4)=ML(LX,4)+1 'TROLL 5110 ' FIND CLOSEST PLAYER 5120 SV.P=0: SV.D=9999 5130 FOR P=1 TO 9 5140 IF (P.NAME$(P)="") OR (P(P,11)<>ML(LX,3) AND P(P,12)<>ML(LX,3)) THEN GOTO 5170 5150 D=ABS(ML(LX,1)-P(P,6))+ABS(ML(LX,2)-P(P,7)) 5160 IF D<SV.D THEN SV.P=P: SV.D=D 5170 NEXT P 5180 P=SV.P 5190 FOR T = 1 TO M.MV(MX) 5200 IF ML(LX,1)<P(P,6) THEN NV=ML(LX,1)+M.ACT: NH=ML(LX,2): GOTO 5240 5210 IF ML(LX,1)>P(P,6) THEN NV=ML(LX,1)-M.ACT: NH=ML(LX,2): GOTO 5240 5220 IF ML(LX,2)<P(P,7) THEN NH=ML(LX,2)+M.ACT: NV=ML(LX,1): GOTO 5240 5230 IF ML(LX,2)>P(P,7) THEN NH=ML(LX,2)-M.ACT: NV=ML(LX,1): GOTO 5240 5240 IF NV < 1 OR NV> 24 OR NH <1 OR NH > 39 THEN GOTO 5330 5250 IF M(NV,NH) <> 32 THEN GOTO 5330 5260 M(NV,NH)=M(ML(LX,1),ML(LX,2)): M(ML(LX,1),ML(LX,2))=32 5270 LOCATE ML(LX,1),ML(LX,2): PRINT " "; 5280 M.H=(NH*8)-8: M.V=(NV*8)-8: DRAW "C3" 5290 DRAW "BM=M.H;,=M.V;": DRAW "BR3;D4;F2;H2;G2" 5300 DRAW "BM=M.H;,=M.V;": DRAW "BR3;D2;L2;R4" 5310 ML(LX,1)=NV: ML(LX,2)=NH 5320 NEXT T 5330 'MONSTER ATTACKS 5340 IF M.ACT<1 THEN GOTO 5860 5350 ' CHECK IF MONSTER NEXT TO PLAYER 5360 V=ML(LX,1): H=ML(LX,2): LV=V-1: HV=V+1: LH=H-1: HH=H+1 5370 IF P(P,6) => LV AND P(P,6) <= HV AND P(P,7) => LH AND P(P,7) <= HH THEN GOTO 5430 ELSE GOTO 5380 5380 IF M.DAM(MX,1) < 80 THEN GOTO 5860 'NOT A DRAGON 5390 MSG$="DRAGON FIRE HITS "+LEFT$(P.NAME$(P),13): GOSUB 4460 5400 WC=8: WD=0 5410 GOTO 5530 5420 ' MAKE ATTACK 5430 MN=INT((MX+1)/4) +1 5440 WK=10-MN 5450 WK=WK+P(P,5): IF WK>10 THEN WK=10 5460 IF WK<1 THEN WK=1 5470 ROLL=INT(RND*10)+1 5480 IF WK > ROLL THEN GOTO 5860 'MISSED 5490 MSG$="A "+M.NAME$(MX)+" HAS ATTACKED "+LEFT$(P.NAME$(P),13): GOSUB 4460 5500 IF M.DAM(MX,1) < 10 THEN WD=M.DAM(MX,1): GOTO 5810 'NORMAL ATTACK 5510 WC=(INT(M.DAM(MX,1)/10)) 5520 WD=M.DAM(MX,1)-(10*WC) 5530 GET #1,P 'GET PLAYER RECORD TO CHECK SAVING THROWS 5540 IF WC=1 THEN GOTO 5750 'POISON 5550 IF WC=2 THEN P(P,1) = 1200: GOTO 5790 'DISEASE 5560 IF WC=5 THEN WK=(INT(M.DAM(MX,2)*RND)+WD)+(INT(30*RND)+5) 5570 IF WC=8 THEN WK=(INT(M.DAM(MX,2)*RND)+WD)+ML(MX,4) 5580 IF WC=5 OR WC=8 THEN GOTO 5590 ELSE GOTO 5620 5590 ZZ = INT(RND*20)+1 'DRAGONS BREATH 5600 IF ZZ => CVI(SV.DRAG$) THEN WK=INT(WK/2) 5610 GOTO 5830 5620 IF WC=6 THEN GOTO 5710 'TURN TO STONE 5630 ' ENERGY DRAIN 5640 IF WC = 3 THEN ZZ=CVI(LVL$): ZZ=ZZ-1 'ENERGY DRAIN 1 LEVEL 5650 IF WC = 4 THEN ZZ=CVI(LVL$): ZZ=ZZ-2 'ENERGY DRAIN 2 LEVELS 5660 IF ZZ<1 THEN P(P,3)=0: GOTO 5850 'PLAYER DEAD 5670 IF WC=3 THEN LSET EXPR$ = MKS$(INT(CVS(EXPR$)/2)): P(P,1)=1200 5680 IF WC=4 THEN LSET EXPR$ = MKS$(INT(CVS(EXPR$)/4)): P(P,1)=1200 5690 LSET LVL$=MKI$(ZZ) 5700 GOTO 5790 5710 ' TURN TO STONE 5720 ZZ = INT(RND*20)+1 'TURN TO STONE 5730 IF ZZ => CVI(SV.STONE$) THEN MSG$="THE GODS HAVE SPARED YOU": GOSUB 4460: WK=0: GOTO 5790 5740 P(P,3)=0: GOTO 5840 5750 ' POISON 5760 ZZ = INT(RND*20)+1 'POISON 5770 IF ZZ => CVI(SV.POISON$) THEN MSG$="THE GODS HAVE SPARED YOU": GOSUB 4460: WK=0: GOTO 5790 5780 P(P,3)=0: GOTO 5840 'PLAYER DEAD 5790 PUT #1,P 'REWRITE PLAYERS RECORD 5800 GOTO 5860 5810 ' CHECK DAMAGE 5820 WK=INT(RND*M.DAM(MX,2))+WD 5830 P(P,3)=P(P,3)-WK 5840 IF P(P,3)>0 THEN MSG$="IT DID "+STR$(WK)+" POINTS DAMAGE": GOSUB 4460: GOTO 5860 5850 IF P(P,3) <1 THEN MSG$=P.NAME$(P)+"IS DEAD": P.NAME$(P) = "": V=P(P,6):H=P(P,7): LOCATE V,H: PRINT " ";: M(V,H)=32: GOSUB 4460 5860 RETURN 5870 'CAST A SPELL 5880 IF T<>1 THEN MSG$="NO TIME": GOSUB 4460: GOTO 6110 'SPELL TAKES FULL TURN 5890 IF P.CLASS$(P) <> "CLERIC " AND P.CLASS$(P) <> "ELF " AND P.CLASS$(P) <> "MAGIC-USER" THEN MSG$="YOU CAN'T CAST SPELLS": GOSUB 4460: GOTO 6110 5900 LOCATE 25,1: PRINT SPACE$(39); 5910 LOCATE 25,1: INPUT;"WHAT SPELL ",W$ 5920 SK$=W$ 5930 GOSUB 330 'MATCH TO SUPPLY FILE 5940 IF FOUND=0 THEN GOTO 6110 5950 S(S,P+2)=S(S,P+2)-1 'SUBTRACT SPELL 5960 IF S(S,2) > P(P,4) THEN MSG$="YOU CAN'T USE THAT SPELL": GOSUB 4460: GOTO 6090 5970 IF (S(S,1) = 1 AND P.CLASS$(P) <> "CLERIC ") OR (S(S,1)=3 AND P.CLASS$(P) = "CLERIC ") THEN MSG$="YOU CAN'T USE THAT SPELL": GOSUB 4460: GOTO 6090 5980 IF S=26 THEN GOSUB 6620: GOTO 6090 'CLOUDKILL 5990 IF S=28 OR S=22 THEN GOSUB 6780: GOTO 6090 'DEATH 6000 IF S=19 OR S=23 THEN P(P,10)=99: GOTO 6090 'LIGHT 6010 IF S=29 OR S=27 THEN TE=3: GOTO 6090 'TURN EVIL 6020 IF S=31 OR S=32 THEN TO.OPEN=6: GOTO 6090 'TO OPEN 6030 IF S=30 THEN HS=4: GOTO 6090 'HASTE 6040 IF S=18 THEN FT=6: GOTO 6090 'FIND TRAPS 6050 IF S=24 THEN GOSUB 6370: GOTO 6090 'LIGHTNING 6060 IF S=17 OR S=21 OR S=20 OR S=25 THEN GOSUB 6120: GOTO 6090 6070 ' INVALID SPELL 6080 MSG$="THATS NOT A VALID SPELL": GOSUB 4460: GOTO 6110 6090 'END TURN 6100 T=MV+1 6110 RETURN 6120 'CURE WOUNDS/RAISE DEAD/CURE CURSE 6130 LOCATE 25,1: PRINT SPACE$(39); 'CURE WOUNDS/RAISE DEAD/CURE CURSE 6140 LOCATE 25,1: PRINT "WHAT PLAYER? "; 6150 GOSUB 7110 'GET REPLY 6160 PX=VAL(W$) 6170 IF S=17 AND P.NAME$(PX)="" THEN MSG$="THAT PLAYER IS DEAD": GOSUB 4460: GOTO 6360 6180 ' CHECK FOR SAME ALIGNMENT 6190 GET #1,P 'GET PLAYER RECORD 6200 SV.ALIGN$=ALIGN$ 6210 GET #1,PX 'GET OTHER PLAYERS RECORD 6220 IF SV.ALIGN$ <> ALIGN$ THEN MSG$="YOU WOULDN'T HELP THAT SWINE": GOSUB 4460: GOTO 6360 6230 IF S=20 OR S=25 THEN GOTO 6320 'REMOVE CURSE 6240 IF S=21 THEN GOTO 6280 'RAISE DEAD 6250 ' CURE WOUNDS 6260 IF (CVI(HIT$)-P(PX,3)) < P(P,4) THEN P(PX,3)=CVI(HIT$) ELSE P(PX,3)=P(PX,3)+P(P,4) 6270 GOTO 6360 6280 ' RAISE DEAD 6290 P.NAME$(PX)=NM$: P(PX,1)=1600: P(PX,3)=1: P(PX,5)=1: P(PX,8)=0: P(PX,9)=0: P(PX,10)=0: M(P(PX,6),P(PX,7))=PX+48 6300 LOCATE P(PX,6),P(PX,7): PRINT CHR$(M(P(PX,6),P(PX,7))); 6310 GOTO 6360 6320 ' REMOVE CURSE 6330 S(33,PX+2)=0 6340 P(PX,5)=P(PX,5)+4 6350 P(PX,1)=P(PX,1)-300 6360 RETURN 6370 ' LIGHTNING 6380 LOCATE 25,1: PRINT SPACE$(39); 'LIGHTNING/DEATH 6390 LOCATE 25,1: PRINT "WHAT WAY (U-D-L-R)? "; 6400 GOSUB 7110 'GET REPLY 6410 IF W$="U" THEN NV=P(P,6)+1:NH=P(P,7):NH2=P(P,7):NV2=P(P,6+2): GOTO 6460 6420 IF W$="D" THEN NV=P(P,6)-1:NH=P(P,7):NH2=P(P,7):NV2=P(P,6-2): GOTO 6460 6430 IF W$="L" THEN NH=P(P,7)-1:NV=P(P,6):NV2=P(P,6):NH2=P(P,7-2): GOTO 6460 6440 IF W$="R" THEN NH=P(P,7)+1:NV=P(P,6):NV2=P(P,6):NH2=P(P,7+2): GOTO 6460 6450 GOTO 6380 6460 FOR LX=1 TO ML.MAX 6470 IF ML(LX,1)<1 THEN GOTO 6600 'DEAD MONSTER 6480 IF (ML(LX,1) = NV OR ML(LX,1) = NV2) AND (ML(LX,2) = NH OR ML(LX,2)=NH2) THEN GOTO 6490 ELSE GOTO 6600 6490 V=ML(LX,1): H=ML(LX,2) 6500 MN=M(V,H)-60 6510 DM=INT(6*P(P,4)) 6520 ML(LX,4)=ML(LX,4)-DM 6530 IF ML(LX,4)>0 THEN MSG$="THE "+M.NAME$(MN)+" HAS BEEN WOUNDED": GOSUB 4460: GOTO 6600 6540 RX=ML(LX,3): R(RX,6)=R(RX,6)-1 6550 MSG$="YOU KILLED THE "+M.NAME$(MN): GOSUB 4460: 6560 LOCATE V,H: PRINT " ";: M(V,H)=32: ML(LX,1)=0: 6570 MX=(INT(MN/4))+1 6580 RX=ML(LX,3): R(RX,6)=R(RX,6)-1 6590 EXPR!=EXPR!+(MX*10) 6600 NEXT LX 6610 RETURN 6620 ' CLOUDKILL 6630 FOR LX=1 TO ML.MAX 6640 IF ML(LX,1)<1 THEN GOTO 6760 'DEAD MONSTER 6650 IF ML(LX,3) = P(P,11) OR ML(LX,3) = P(P,12) THEN GOTO 6660 ELSE GOTO 6760 6660 V=ML(LX,1): H=ML(LX,2) 6670 MN=M(V,H)-60 6680 ROLL=INT(RND*2)+1: IF ROLL=1 THEN DM=1 ELSE DM=5 6690 ML(LX,4)=ML(LX,4)-DM 6700 IF ML(LX,4)>0 THEN MSG$="THE "+M.NAME$(MN)+" HAS BEEN WOUNDED":GOSUB 4460: GOTO 6760 6710 MSG$="YOU KILLED THE "+M.NAME$(MN): GOSUB 4460: 6720 RX=ML(LX,3): R(RX,6)=R(RX,6)-1 6730 LOCATE V,H: PRINT " ";: M(V,H)=32: ML(LX,1)=0: 6740 MX=(INT(MN/4))+1 6750 EXPR!=EXPR!+(MX*10) 6760 NEXT LX 6770 RETURN 6780 'DEATH SPELL 6790 LOCATE 25,1: PRINT SPACE$(39); 6800 LOCATE 25,1: PRINT "WHAT WAY (U-D-L-R)? "; 6810 V=P(P,6): H=P(P,7) 6820 GOSUB 7110 'GET REPLY 6830 IF W$="U" THEN DIR=-1: GOTO 6880 6840 IF W$="D" THEN DIR=1: GOTO 6880 6850 IF W$="L" THEN DIR=-1: GOTO 6920 6860 IF W$="R" THEN DIR=1: GOTO 6920 6870 GOTO 6780 6880 ' LOOK VERT 6890 V=V+DIR: IF V>24 OR V<1 THEN MSG$="YOU MISSED": GOSUB 4460: GOTO 7100 6900 IF M(V,H)=<32 THEN GOTO 6880 6910 GOTO 6950 6920 ' LOOK HOR 6930 H=H+DIR: IF H>39 OR H<1 THEN MSG$="YOU MISSED": GOSUB 4460: GOTO 7100 6940 IF M(V,H)=<32 THEN GOTO 6920 6950 ' CHECK WHAT YOU HIT 6960 IF M(V,H) > 48 AND M(V,H) < 58 THEN GOTO 7060 'HIT A PLAYER 6970 IF M(V,H) > 60 AND M(V,H) < 124 THEN GOTO 6990 'HIT A MONSTER 6980 MSG$="YOU MISSED": GOSUB 4460: GOTO 7100 6990 ' HIT A MONSTER 7000 FOR LX=1 TO ML.MAX 7010 IF ML(LX,1)=V AND ML(LX,2)=H THEN GOTO 7030 7020 NEXT 7030 MN=M(V,H)-60 7040 GOSUB 4350 7050 GOTO 7100 7060 ' HIT A PLAYER 7070 PX=M(V,H)-48 7080 MSG$="YOU KILLED "+P.NAME$(PX): GOSUB 4460 7090 P.NAME$(PX)="": LOCATE V,H: PRINT " ";: M(V,H)=32 7100 RETURN 7110 'GET INPUT VARIABLE 7120 W$="" 7130 REPLY$=INKEY$ 7140 IF REPLY$="" THEN GOTO 7130 7150 IF LEN(REPLY$)=1 THEN GOTO 7220 ELSE REPLY$=RIGHT$(REPLY$,1) 'CHK BACKSP 7160 IF ASC(REPLY$) <> 75 THEN BEEP: GOTO 7130 'INVALID CHAR 7170 L=LEN(W$): IF L=0 THEN BEEP: GOTO 7130 7180 W$=LEFT$(W$,L-1) 'ERASE LAST CHAR FROM INPUT VAR 7190 L=POS(0): L=L-1: LOCATE 25,L: PRINT " "; 'ERASE LAST CHAR FROM SCREEN 7200 LOCATE 25,L 'REPOSITION CURSOR 7210 GOTO 7130 7220 IF ASC(REPLY$)=13 THEN GOTO 7260 'ENTER WAS HIT 7230 PRINT REPLY$; 7240 W$=W$+REPLY$ 7250 GOTO 7130 7260 RETURN